#include <QFile>
#include <QTextStream>
#include "asistentexml.h"

AsistenteXml::AsistenteXml()
{
}

AsistenteXml::AsistenteXml(QDomDocument& documento)
{
    this->documento = documento;
}

AsistenteXml::~AsistenteXml()
{

}

void AsistenteXml::nuevo(const QString& nombreTagRaiz)
{
	QDomElement elementoRaiz = documento.createElement(nombreTagRaiz);
    documento.appendChild(elementoRaiz);
}

bool AsistenteXml::abrirArchivo(const QString& nombreArchivo)
{
    QFile fichero(nombreArchivo);

    if (!fichero.open(QFile::ReadOnly | QFile::Text)) {
        mensajeError = "No se ha podido abrir el archivo " + nombreArchivo;
        return false;
    }
    bool domCargado = documento.setContent(&fichero);

    fichero.close();

    if (!domCargado) {
        mensajeError = "No se reconoce el formato del archivo " + nombreArchivo;
        return false;
    }

    return true;
}

bool AsistenteXml::guardarArchivo(const QString& nombreArchivo)
{
	QFile fichero(nombreArchivo);

    if (!fichero.open(QFile::WriteOnly | QFile::Text)) {
        mensajeError = "No se ha podido guardar el archivo " + nombreArchivo;
        return false;
    }

    QTextStream stream(&fichero);
    stream << documento.toString(4);

    fichero.close();
	return true;
}

QDomElement AsistenteXml::getElementoRaiz()
{
    return documento.documentElement();
}

QDomElement AsistenteXml::escribirElemento(QDomElement& elementoPadre, const QString& nombreTag)
{
    QDomElement elemento = documento.createElement(nombreTag);
    elementoPadre.appendChild(elemento);
    return elemento;
}

QDomElement AsistenteXml::escribirElementoTexto(QDomElement& elementoPadre, const QString& nombreTag, const QString& texto)
{
    QDomElement elemento = escribirElemento(elementoPadre, nombreTag);
    QDomText nodoTexto = documento.createTextNode(texto);
    elemento.appendChild(nodoTexto);
    return elemento;
}

void AsistenteXml::escribirAtributo(QDomElement& elemento, const QString& nombreAtributo, const QString& valor)
{
    elemento.setAttribute(nombreAtributo, valor);
}

QList<QDomElement> AsistenteXml::leerElementos(const QDomElement& elementoPadre, const QString& nombreTag)
{
    QList<QDomElement> listaElementos;

    for (QDomElement elemento = elementoPadre.firstChildElement(nombreTag);
        !elemento.isNull();
        elemento = elemento.nextSiblingElement(nombreTag)) {
        listaElementos.append(elemento);
    }
    return listaElementos;
}

QString AsistenteXml::leerElementoTexto(const QDomElement& elementoPadre, const QString& nombreTag)
{
    return elementoPadre.firstChildElement(nombreTag).text();
}

QString AsistenteXml::leerAtributo(const QDomElement& elemento, const QString& nombreAtributo)
{
    return elemento.attribute(nombreAtributo);
}